#ifndef RAMP_H_
#define RAMP_H_

#include "../../SAMA_Function.h"

/*模块可调参数结构体*/
typedef struct {
	float Init_Value;	//< 斜坡响应初始值
	float Slope_Value;	//< 斜率值
	float Time;			//< 斜坡响应需等待的时间
	float H_Limit;      //< 上限
	float L_Limit;      //< 下限
}RAMP_Par_t;


/*模块运算中间参数结构体定义*/
typedef struct {
	float Time_Sum;		//< 斜坡响应等待时间累积值
	float Ramp_AO;      //< 斜坡模块模拟量输出
	float Time_Last;    //< 记录上位上一次下发的“发生时间”
}RAMP_Sta_t;


/*模块参数结构体定义*/
struct RAMP_T
{
	Model_Base_t Base;	//< 模块基本参数结构体
	RAMP_Par_t Par;		//< 模块可调参数结构体
	RAMP_Sta_t Sta;		//< 模块运算中间参数结构体
};


extern RAMP_T* RAMP_t;
extern BAK_Attend_Para_t RAMP_Attend_Para;

/*函数*/
bool CALCU_SAMA(RAMP)(Model_Base_t* arg, float dt, bool* DI, bool* DO, float* AI, float* AO);	 //< SAMA运算函数
int BC_PARA(RAMP)(Model_Base_t* arg, void** Data);											     //< 广播SAMA参数变量函数（无参数需要广播的模块直接将BCPara函数设置为NULL即可）
int BAK_STA(RAMP)(Model_Base_t* arg, void** Data);											     //< 备份SAMA运算中间参数
int ANA_STA(RAMP)(Model_Base_t* arg, void** Data);											     //< 解析备份的SAMA运算中间参数
int CHANGE_PAR(RAMP)(Model_Base_t* arg, void** Data);											 //< 在线修改模块参数函数
void INIT_STAPAR(RAMP)(Model_Base_t* arg);													     //< 初始化模块运算中间参数


#endif
